package Lexer

const (
	Token_EOF = iota //文件结尾

	/* 特殊符号 */
	Token_Sep_Vararg       // ...
	Token_Sep_Semi         // ;
	Token_Sep_Comma        // ,
	Token_Sep_Dot          // .
	Token_Sep_Colon        // :
	Token_Sep_Label        // ::
	Token_Seq_LeftParen    // (
	Token_Seq_RightParen   // )
	Token_Seq_LeftBracket  // [
	Token_Seq_RightBracket // ]
	Token_Seq_LeftBrace    // {
	Token_Seq_RightBrace   // }

	/* 操作 */
	Token_Op_Assign // =
	Token_Op_Add    // +
	Token_Op_Mul    // *
	Token_Op_Div    // /
	Token_Op_Power  // ^ 乘方
	Token_Op_Mod    // % 取模
	Token_Op_Join   // .. 连接
	Token_Op_Lt     // <
	Token_Op_Le     // <=
	Token_Op_Gt     // >
	Token_Op_Ge     // >=
	Token_Op_Eq     // ==
	Token_Op_NotEq  // ~=
	Token_Op_And    // and
	Token_Op_Or     // or
	Token_Op_Minus  // - ( 减号 或者 负号)
	Token_Op_Len    // #
	Token_Op_Not    // Not

	/*关键字*/
	Token_Kw_Break    //
	Token_Kw_Do       //
	Token_Kw_Else     //
	Token_Kw_ElseIf   //
	Token_Kw_End      //
	Token_Kw_False    //
	Token_Kw_True     //
	Token_Kw_For      //
	Token_Kw_Function //
	Token_Kw_Goto     //
	Token_Kw_If       //
	Token_Kw_In       //
	Token_Kw_Local    //
	Token_Kw_Nil      //
	Token_Kw_Repeat   //
	Token_Kw_Return   //
	Token_Kw_Then     //
	Token_Kw_Until    //
	Token_Kw_While    //

	Token_Identifier //标识符
	Token_Number     //数值
	Token_String     //Str
)

var KeyWordsMap = map[string]int{
	"break":    Token_Kw_Break,
	"do":       Token_Kw_Do,
	"else":     Token_Kw_Else,
	"elseif":   Token_Kw_ElseIf,
	"end":      Token_Kw_End,
	"false":    Token_Kw_False,
	"true":     Token_Kw_True,
	"for":      Token_Kw_For,
	"function": Token_Kw_Function,
	"goto":     Token_Kw_Goto,
	"if":       Token_Kw_If,
	"in":       Token_Kw_In,
	"local":    Token_Kw_Local,
	"nil":      Token_Kw_Nil,
	"repeat":   Token_Kw_Repeat,
	"return":   Token_Kw_Return,
	"then":     Token_Kw_Then,
	"until":    Token_Kw_Until,
	"while":    Token_Kw_While,
}
